package lambda;

/**
 * @author deity
 * @version 1.0
 * @date 2020/11/7 22:03
 * <p>
 * 1-方法重载的问题：
 * 1-Java类型系统中的方法重载
 * 2-方法重载的实现
 * 3-当方法重载遇上Lambda表达式
 * <p>
 * 2-方法重载对Lambda表达式的影响
 */
public class App4 {

    interface Param1 {
        void outInfo(String info);
    }

    interface Param2 {
        void outInfo(String info);
    }


    //定义重载的方法
    public void lambdaMethod(Param1 param) {
        param.outInfo("Hello Param1.");
    }

    public void lambdaMethod(Param2 param) {
        param.outInfo("Hello Param2.");
    }


    public static void main(String[] args) {
        App4 app = new App4();

        //传统方式:匿名内部类
        app.lambdaMethod(new Param1() {
            @Override
            public void outInfo(String info) {
                System.out.println(info);
            }
        });
        app.lambdaMethod(new Param2() {
            @Override
            public void outInfo(String info) {
                System.out.println("-----param2-----------");
                System.out.println(info);
            }
        });



        /*
        Lambda表达式存在类型检查 -> 自动推导lambda表达式的目标类型
        lambdaMethod() -> 方法 -> 重载方法
                -> Param1  函数式接口
                -> Param2  函数式接口
                调用方法 -> 传递lambda表达式 -> 自动推导 ->
                    -> Param1 | Param2
         */
//        app.lambdaMethod((info) -> System.out.println("lambda:" + info));

    }

}
